HTTP 基本原理

URI和URL

URI (Uniform Resource Identifier),即统一资源标志符。

URL(Universal Resource Locator),即统一资源定位符。

URL 是 URI 的子集,每个 URL 都是 URI,但不是每个 URI 都是 URL。因为 URI 还包括一个子类叫做 URN(Universal Resource Name) ,即统一资源名称。所以 URL、URN 和 URI 的关系可以表示为如图:

image-20190124155231478

目前在互联网中,URN 用的非常少,几乎所有的 URI 都是 URL ,一般的网页链接我们既可以称为 URL,也可以称为 URI,普遍大家都称之为 URL。

超文本

超文本,叫做 hypertext [美: ‘haɪpɚ’tɛkst] [英: ‘haɪpətekst]。

网页的源代码 HTML 就可以称之为超文本。

HTTP 和 HTTPS

URL 的开头有 http 和 https,这就是访问资源需要的协议类型,其他协议类型还有 ftp、sftp、smb 。

HTTP

HTTP(Hyper Text Transfer Protocol),中文名叫作超文本传输协议,HTTP 协议是用于从网络传输超文本数据到本地浏览的传送协议,它能保证高效而准确地传送超文本文档。

HTTPS

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲就是 HTTP 的安全版本,即 HTTP 下加入 SSL 层,简称为 HTTPS。

HTTPS 的安全基础是 SSL,因此通过 HTTPS 传输的内容都是经过 SSL 加密的,它的主要作用可以分为两种:

  • 建立一个信息安全通道来保证数据传输的安全
  • 确认网站的真实性

Chrome 下 f12 进入开发者模式

Network

当我们访问 www.baidu.com 时,Network会产生很多条目,其中一个条目就代表一次发送请求和接收相应的过程。

image-20190124161404150

其中各列含义如下:

  • Name:请求的名称,一般是 URL 最后一部分内容当做名称。
  • Status:响应的状态码,200表示响应正常,通过状态码,我们可以判断请求发送后是否得到了正常的响应。
  • Type:请求的文档类型。document,代表这次请求的是一个 HTML 文档。
  • Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
  • Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。
  • Time:发起请求到获取相应所用的总时间。
  • Waterfall:网络请求的可视化瀑布。

点击 Name 下的条目 ,查看详细信息:

image-20190124162116526

请求

请求的方法

常见的请求的方法有两种:GET 和 POST。

在浏览器中直接输入 URL 并回车,就发起了一个 GET 请求,请求的参数会直接包含到 URL 中。POST 请求大多在表单提交时发起,例如登录表单,那么传输的数据通常会通过表单的形式进行传输,而不会体现在 URL 中。

GET 和 POST 区别:

  • GET 请求中的参数包含在 URL 中,数据可以在 URL 中看到,而 POST 请求的 URL 不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
  • GET 请求提交的数据最多只有1024字节,而 POST 方式没有限制。
  • 一般包含敏感信息,使用POST发送,文件较大时,也会选用POST方式。

image-20190124163247383

其他请求方法参考

请求的网址

请求的网址,即 URL 统一资源定位符,它可以唯一确定我们想请求的资源

请求头

请求头用来说明服务器要使用的附加信息,比较重要的有 Cookie、Referer、User-Agent 等。

image-20190124163854892

  • Accept:请求报头域,用于指定客户端可以接受哪些类型的信息。
  • Accept-Language:客户端可接收的语言类型。
  • Accept-Encoding:客户端可接收的编码类型。
  • Host:指定请求资源的主机 IP 和 端口号,内容为请求 URL 的原始服务器或网关位置。
  • Cookie:网站为了辨别用户进行会话跟踪而存储在用户本地的数据,主要功能是维持当前访问会话。
  • Referer:识别这个请求是从哪个页面发过来的,服务器拿到这个信息做处理,用来做源统计、防盗链处理等。
  • User-Agent:简称 UA。可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时,加上这个信息可以伪装成浏览器。
  • Content-Type:叫做互联网媒体类型,他用来表示具体请求中的媒体类型信息。如:text/html 代表 HTML 格式,image/gif 代表 GIF 图片等等。参考

请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。

请求体

请求体一般承载的内容是 POST 请求中的表单数据。GET请求时,请求体中为空。

在 Request Headers 中指定 Content-Type 为 application/x-www-form-urlencoded 时,才会以表单的形式提交,当设置为 application/json 时,是用来提交 JSON 数据,设置为 multipart/form-data时,是用来上传文件。

爬虫时,需要使用正确的 Content-Type,否则会导致 POST 提交后无法正常响应。

响应

响应,由服务器返回给客户端,可以分为三个部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。

响应状态码

参考

响应头

image-20190124165638621

响应头包含了服务器对请求的应答信息:

  • Date:标识响应产生的时间
  • Last-Modified:标识资源的最后修改时间
  • Content-Encoding:响应内容的编码
  • Server:包含服务器的信息,名称和版本号
  • Content-Type:文档类型,指定返回的数据类型是什么。
  • Set-Cookie:设置 Cookies,告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。
  • Expires:指定响应的过期时间,让浏览器将加载的内容更新到缓存中,如果再次访问,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。

响应体

在浏览器开发者工具中,Response中可以看到网页源代码,也就是响应体的内容,它是解析的目标。在做爬虫时,我们主要通过响应体得到网页的源代码、JSON数据等。

image-20190124170635970